package br.edu.fanor.esfinge.business.impl;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.interceptor.Interceptors;

import br.edu.fanor.esfinge.business.UsuarioSession;
import br.edu.fanor.esfinge.dao.AmigoDAO;
import br.edu.fanor.esfinge.dao.UsuarioDAO;
import br.edu.fanor.esfinge.entity.Amigo;
import br.edu.fanor.esfinge.entity.Usuario;
import br.edu.fanor.esfinge.interceptor.UsuarioInterceptor;

@Interceptors({UsuarioInterceptor.class})
@TransactionManagement(TransactionManagementType.CONTAINER)
@Stateless(mappedName="ejb/usuarioSession")
public class UsuarioSessionImpl implements UsuarioSession {

	@EJB
	private UsuarioDAO usuarioDAO;
	@EJB
	private AmigoDAO amigoDAO;
	
	@PostConstruct
	public void postConstruct() {
		System.out.println("Criou o EJB UsuarioSessionImpl");
	}
	
	@TransactionAttribute(TransactionAttributeType.NEVER)
	public void inserirAlterarUsuario(Usuario usuario, List<Amigo> amigos) throws Exception{
		
		//para cada amigo
		for (Amigo amigo : amigos) {
			
			//usuario ainda não esta cadastrado
			if(usuario.getId() == null) {
				usuario = usuarioDAO.inserir(usuario);
			}
			
			amigo.setUsuario(usuario);
			
			//amigo já cadastrado
			if(amigo.getId() != null){
				amigoDAO.atualizar(amigo);
			} else { //amigo ainda não cadastrado
				amigo = amigoDAO.inserir(amigo);
			}
			
			usuario.getAmigo().add(amigo);
			usuarioDAO.atualizar(usuario);
			
		}
	}
	
	
	@PreDestroy
	public void preDestroy(){
		System.out.println("Destruiu o EJB UsuarioSessionImpl");
	}

	@Override
	public void inserir(Usuario usuario) {
		usuarioDAO.inserir(usuario);
	}
	
}
